import json
import random
import string
import argparse
import os

def generate_random_string(length):
    """生成指定长度的随机字符串"""
    return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(length))

def generate_random_data(num_entries, entry_size):
    """生成包含随机数据的列表"""
    data = []
    for i in range(num_entries):
        entry = {
            "id": i,
            "name": generate_random_string(10),
            "description": generate_random_string(entry_size),
            "value": random.randint(1, 1000000),
            "is_active": random.choice([True, False]),
            "timestamp": random.randint(1000000000, 2000000000)
        }
        data.append(entry)
    return data

def calculate_file_size(num_entries, entry_size):
    """估算文件大小(KB)"""
    # 每个条目约占 (entry_size + 200) 字节
    bytes_per_entry = entry_size + 200
    total_bytes = num_entries * bytes_per_entry
    return total_bytes / 1024  # 转换为KB

def main():
    parser = argparse.ArgumentParser(description='生成大型JSON测试文件')
    parser.add_argument('--entries', type=int, default=10000, help='JSON对象数量')
    parser.add_argument('--entry-size', type=int, default=500, help='每个对象的描述字段大小(字符)')
    parser.add_argument('--output', type=str, default='large_data.json', help='输出文件名')
    args = parser.parse_args()

    # 计算预估文件大小
    file_size_kb = calculate_file_size(args.entries, args.entry_size)
    print(f"预估文件大小: {file_size_kb:.2f} KB")

    # 生成随机数据
    data = generate_random_data(args.entries, args.entry_size)

    # 写入JSON文件
    with open(args.output, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

    # 输出实际文件大小
    actual_size = os.path.getsize(args.output) / 1024
    print(f"已生成JSON文件: {args.output}")
    print(f"实际文件大小: {actual_size:.2f} KB")

if __name__ == "__main__":
    main()